﻿using Echart.Model.TextStyle;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Echart.Model.ToolTip
{
    /// <summary>
    /// 提示框组件可以设置在多种地方：
    /// 可以设置在全局，即 tooltip
    /// 可以设置在坐标系中，即 grid.tooltip、polar.tooltip、single.tooltip
    /// 可以设置在系列中，即 series.tooltip
    /// 可以设置在系列的每个数据项中，即 series.data.tooltip
    /// </summary>
    public class tooltip
    {
        /// <summary>
        /// 是否显示提示框组件，包括提示框浮层和 axisPointer。
        /// </summary>
        public bool? show { get; set; }

        /// <summary>
        /// 触发类型。
        /// 可选：   
        /// 'item' 数据项图形触发，主要在散点图，饼图等无类目轴的图表中使用。
        /// 'axis' 坐标轴触发，主要在柱状图，折线图等会使用类目轴的图表中使用。在 ECharts 2.x 中只支持类目轴上使用 axis trigger，在 ECharts 3 中支持在直角坐标系和极坐标系上的所有类型的轴。并且可以通过 axisPointer.axis 指定坐标轴。
        /// 'none' 什么都不触发。
        /// </summary>
        public string trigger { get; set; }

        /// <summary>
        /// 坐标轴指示器配置项。
        /// </summary>
        public object axisPointer { get; set; }

        /// <summary>
        /// 是否显示提示框浮层，默认显示。只需tooltip触发事件或显示axisPointer而不需要显示内容时可配置该项为false。
        /// </summary>
        public bool? showContent { get; set; }

        /// <summary>
        /// 是否永远显示提示框内容，默认情况下在移出可触发提示框区域后 一定时间 后隐藏，设置为 true 可以保证一直显示提示框内容。
        /// </summary>
        public bool? alwaysShowContent { get; set; }

        /// <summary>
        /// 提示框触发的条件，可选：
        /// 'mousemove'    鼠标移动时触发。
        /// 'click'    鼠标点击时触发。
        /// 'mousemove|click'    同时鼠标移动和点击时触发。
        /// 'none'    不在 'mousemove' 或 'click' 时触发，用户可以通过 action.tooltip.showTip 和 action.tooltip.hideTip 来手动触发和隐藏。也可以通过 axisPointer.handle 来触发或隐藏。
        /// </summary>
        public string triggerOn { get; set; }

        /// <summary>
        /// 浮层显示的延迟，单位为 ms，默认没有延迟，也不建议设置。在 triggerOn 为 'mousemove' 时有效。
        /// </summary>
        public double? showDelay { get; set; }

        /// <summary>
        /// 浮层隐藏的延迟，单位为 ms，在 alwaysShowContent 为 true 的时候无效。
        /// </summary>
        public double? hideDelay { get; set; }

        /// <summary>
        /// 鼠标是否可进入提示框浮层中，默认为false，如需详情内交互，如添加链接，按钮，可设置为 true
        /// </summary>
        public bool? enterable { get; set; }

        /// <summary>
        /// 浮层的渲染模式，默认以 'html 即额外的 DOM 节点展示 tooltip；
        /// 此外还可以设置为 'richText' 表示以富文本的形式渲染，渲染的结果在图表对应的 Canvas 中（目前 SVG 尚未支持富文本），这对于一些没有 DOM 的环境（如微信小程序）有更好的支持。
        /// </summary>
        public string renderMode { get; set; }

        /// <summary>
        /// 是否将 tooltip 框限制在图表的区域内。
        /// 当图表外层的 dom 被设置为 'overflow: hidden'，或者移动端窄屏，导致 tooltip 超出外界被截断时，此配置比较有用。
        /// </summary>
        public bool? confine { get; set; }

        /// <summary>
        /// 是否将 tooltip 的 DOM 节点添加为 HTML 的 <body> 的子节点。只有当 renderMode 为 'html' 是有意义的。
        /// 默认值是 false。false 表示，tooltip 的 DOM 节点会被添加为本图表的 DOM container 的一个子孙节点。但是这种方式导致，如果本图表的 DOM container 的祖先节点有设置 overflow: hidden，那么当 tooltip 超出 container 范围使可能被截断。这个问题一定程度上可以用 tooltip.confine 来解决，但是不一定能解决所有场景。
        /// </summary>
        public bool? appendToBody { get; set; }

        /// <summary>
        /// 提示框浮层的移动动画过渡时间，单位是 s，设置为 0 的时候会紧跟着鼠标移动。
        /// </summary>
        public double? transitionDuration { get; set; }

        /// <summary>
        /// 提示框浮层的位置，默认不设置时位置会跟随鼠标的位置。
        /// </summary>
        public Array[] position { get; set; }

        /// <summary>
        /// 提示框浮层内容格式器
        /// </summary>
        public string formatter { get; set; }

        /// <summary>
        /// 提示框浮层的背景颜色。
        /// </summary>
        public string backgroundColor { get; set; }

        /// <summary>
        /// 提示框浮层的边框颜色。
        /// </summary>
        public string borderColor { get; set; }

        /// <summary>
        /// 提示框浮层的边框颜色。
        /// </summary>
        public double? borderWidth { get; set; }

        /// <summary>
        /// 提示框浮层内边距
        /// </summary>
        public double? padding { get; set; }

        /// <summary>
        /// 提示框浮层的文本样式。
        /// </summary>
        public textStyle textStyle { get; set; }

        /// <summary>
        /// 额外附加到浮层的 css 样式
        /// </summary>
        public string extraCssText { get; set; }
    }
}
